/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dahg.project.istu.controller.bean.commons.publicos;

import com.dahg.project.istu.controller.bean.AbstractSingleEntityBean;
import com.dahg.project.istu.controller.exceptions.IstuValidationException;
import com.dahg.project.istu.controller.model.Usuario;
import com.dahg.project.istu.controller.services.publicos.IUsuarioMantenimientoService;
import javax.ejb.Stateless;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

/**
 *
 * @author dahg
 */
@Stateless
public class UsuarioMantenimientoService extends AbstractSingleEntityBean<Usuario> implements IUsuarioMantenimientoService{

    @Override
    protected Class<Usuario> getClazz() {
        return Usuario.class;
    }

    @Override
    public Usuario checkIfExist(String login) throws IstuValidationException {        
        /*
        Equivalente a: select u from Usuario u where u.login = :loginParameter
        */
        
        CriteriaBuilder builder = getCriteriaBuilder();
        CriteriaQuery<Usuario> criteriaQuery = getCriteriaQuery();        
        Root<Usuario> from = criteriaQuery.from(getClazz());        
        CriteriaQuery<Usuario> select = criteriaQuery.select(from);
        
        Predicate predicate = builder.equal(from.get("login"), login);        
        CriteriaQuery<Usuario> selectEquals = select.where(predicate);
        
        Usuario usuario = null;
        try {
            Query query = getTypedQuery(selectEquals);            
            //query.setHint("javax.persistence.cache.storeMode", CacheStoreMode.REFRESH);
            usuario = (Usuario ) query.getSingleResult();
        }
        catch (NoResultException ex) {
            throw new IstuValidationException("Usuario no existe");
        }
        
        return usuario;
    }
    
}
